// class Solution
// {
//     struct cmp
//     {
//         bool operator()(ListNode *l1, ListNode *l2)
//         {
//             return l1->val > l2->val;
//         }
//     };

// public:
//     ListNode *mergeKLists(vector<ListNode *> &lists)
//     {
//         priority_queue<ListNode *, vector<ListNode *>, cmp> heap; // ⼩根堆
//         for (auto head : lists)
//         {
//             if (head != nullptr)
//             {
//                 heap.push(head);
//             }
//         }
//         ListNode *ret = new ListNode(0);
//         ListNode *prev = ret;
//         while (heap.size())
//         {
//             ListNode *t = heap.top();
//             heap.pop();
//             prev = prev->next = t;
//             if (t->next != nullptr)
//             {
//                 heap.push(t->next);
//             }
//         }
//         return ret->next;
//     }
// };
#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
using namespace std;
int n;
int main()
{
    cin >> n;
    vector<int> nums(n);

    for (int i = 0; i < n; i++)
    {
        cin >> nums[i];
    }
    sort(nums.begin(), nums.end());
    int cur = 1, lenth = 0, retnum = 0;

    for (int i = 1; i < n; i++)
    {
        int tmplenth = 1;
        while (i < n && nums[i] == nums[i - 1])
        {
            tmplenth++;
            i++;
        }
        if (tmplenth > lenth)
        {
            lenth = tmplenth;
            retnum = nums[i - 1];
        }
    }

    cout << retnum << endl;
    return 0;
}